#ifndef _BOLA_H_
#define _BOLA_H_

#ifndef EMBED
	#include <stdlib.h>
#endif
#include <math.h>
#include "utypes.h"
#include "videog.h"

/** @defgroup Bola Bola
 * @{
 *
 * @brief Funções que gerem as bolas.
 */
 
extern int VELOCIDADE_INICIAL_BOLA; // Velocidade inicial das bolas "inimigas"
extern int VELOCIDADE_MISSIL; // Velocidade dos mísseis

#define BOLA 0x80
#define BOLA_JOGADOR 0x81
#define BOLA_INIMIGA 0x82
#define MISSIL 0x01
#define OBJECTIVO 0x02

#define RAIO_BOLA 14
#define COR_BOLA_JOGADOR GREEN
#define COR_BOLA_INIMIGA RED
#define RAIO_MISSIL 10
#define COR_MISSIL RED | BLUE
#define RAIO_OBJECTIVO 8
#define COR_OBJECTIVO RED | GREEN | BRIGHT

#define VMETADE 0
#define VNORMAL 1
#define VDOBRO 2

typedef char Bonus_velocidade;

/** Estrutura de uma bola. */
typedef struct {
	float x;
	float y;
	float vx; // velocidade horizontal
	float vy; // velocidade vertical
	int raio; // raio da bola
	char tipo;
	int cor;
} Bola;

extern int HRES;
extern int VRES;
extern int timer_som_colisao;

/** Cria uma nova bola e devolve um apontador para a bola criada. */
Bola* newBola(float x, float y, float vx, float vy, char tipo,int raio, int cor);

/** Desenha uma bola na memória indicada. */
void drawBola(Bola* b, char* base);

/** Apaga uma bola da memória indicada. */
void eraseBola(Bola* b, char* base);

/** Actualiza a posição (x,y) da bola, de acordo com a velocidade (indicando, também, se a velocidade deve ser afectada por um bónus). */
void updatePositionBola(Bola* b, Bonus_velocidade velocidade);

#endif
